SPLIT & UNSPLIT Big File SPLITting and UNSPLITting Utilities By Joseph M. Morgan SPLIT & UNSPLIT Table of Contents Copyright and User Information . . . . . . . . . . . . . . . . 1 Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . 2 SPLIT - Large File Splitting Utility . . . . . . . . . . . . . 3 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 3 Requirements. . . . . . . . . . . . . . . . . . . . . . . 3 SPLIT - How To Do It. . . . . . . . . . . . . . . . . . . 4 What SPLIT Does . . . . . . . . . . . . . . . . . . . . . 4 UNSPLIT - Large File UnSplitting Utility . . . . . . . . . . . 5 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 5 Requirements. . . . . . . . . . . . . . . . . . . . . . . 5 UNSPLIT - How To Do It. . . . . . . . . . . . . . . . . . 5 What UNSPLIT Does . . . . . . . . . . . . . . . . . . . . 5 INFO On Both Programs. . . . . . . . . . . . . . . . . . . . . 6 Installing. . . . . . . . . . . . . . . . . . . . . . . . 6 History & Direction . . . . . . . . . . . . . . . . . . . 6 Future Support. . . . . . . . . . . . . . . . . . . . . . 7 Cost & Registration . . . . . . . . . . . . . . . . . . . 8 Copyright and User Information These programs and this documentation is the property of Joseph M. Morgan. You may freely copy and distribute this software and its documentation for non-commercial and non-governmental use as long as for any given program, the program and it's documentation are copied and distributed together. You may not distribute the software without the documentation or the documentation without the software. Please send all suggestions, inquiries, and other correspondence to: Joseph M. Morgan 9045 Kingston Rd. #1804 Shreveport, LA 71118 Disclaimer These utilities, their associated documentation and the media on which they are distributed are distributed as is, with no warranty either explicit or implied. Even though every attempt has been made to provide high-quality, accurate information, this documentation may contain omissions or errors. There is no guarantee, either explicit or implied, that this program will work properly on any given computer. In no event shall Joseph M. Morgan be held liable in any way for any damages of any kind to include lost profits of any amount, lost savings of any amount, or other incidental or consequential damages of any kind arising, for any reason, from the use, misuse, or inability to use these utility programs and/or their associated documentation even if Joseph M. Morgan has been advised of the possibility or occurrence of such damages. If the program is defective in any way, you, the user, assume all responsibility and costs of all necessary repairs and/or adjustments and/or servicing of any kind. The distribution rights and, if applicable, registration cost are all subject to change or withdrawal without prior notification of any kind. The contents of the program documentation may be in error or inaccurate and, therefore, is subject to change at all times without prior notification of any kind. If you, the user, reside in an area where local laws of any kind including city, county or parish, state or other local laws that either explicitly or implicitly require Joseph M. Morgan to bear responsibility or liability of any kind resulting from the use, misuse, or inability to use these programs and their associated documentation, you, the user, are hereby not allowed to use these programs or their associated documentation, or any other program and/or its associated documentation produced by Joseph M. Morgan for any reason or purpose on any computer or equipment either owned or not owned by you, the user. Use of any one of these programs constitutes full agreement with the conditions of this disclaimer by you, the user, and you hereby accept all responsibility for use of these programs and their associated documentation. SPLIT - Large File Splitting Utility Purpose The reason I wrote SPLIT was because we despise using the DOS BACKUP utility to copy a single large file from one computer to another. Typically, we will use a compression utility to compress an entire directory, or entire directory tree, into one file. Usually, however, this file is too large to fit on one 1.44MB or 1.2MB floppy. Plus, have you ever tried using BACKUP on a DOS version 5.0 system and restoring on a DOS version 2.11 system? It can't be done folks! Also, have you ever been in the middle of a backup and run out of 1.44MB disks, and had a stack of 1.22's just sitting around waiting to be used? But, you also knew that the 1.22s alone wouldn't be enough? Try changing drives in mid-stream? It can't be done! You ever run out of blank disks and tried to continue your backup onto a good disk that contained needed files? OOPS! Well, SPLIT is the answer. SPLIT will take any single file, and write it to multiple diskettes (or even multiple hard-drives if you want, though you'd probably never want), even if the diskettes are being used by other files. No control files are written. No version formatting requirements. And SPLIT doesn't care which version (or manufacturer) of DOS you might be using. SPLIT will also allow you to change diskette drives and sizes on the fly! So you can start with a 1.44MB and then go to a 1.22MB, then a 720K or 360K, and back to a 1.44. Note that during testing, I couldn't find a 320K, 180K or 160K diskette, so I don't know for an absolute fact that these will work. But if your computer and version of DOS will read and write to one of these kinds, I see no reason why SPLIT wouldn't work with them. Requirements SPLIT requires DOS 2.11 or higher to work. SPLIT doesn't check the version, and I don't know if it will work on a version earlier than that, but I trust my compiler's technical documentation, and I couldn't find a computer running anything less than 2.11 on which to test it! If you're using some version earlier than that, try it. If it works, the first thing to do is to let me know. At the very least, I can correct my documentation. The next thing you need to do if you're using a DOS version less than 2.11 is to UPGRADE!!! Hopefully, you have a hard drive and need to copy a file larger than your largest diskette capacity from one computer to another. But there is no reason that you couldn't use a floppy- only system to SPLIT a 400K file on a 720K diskette across multiple 360K diskettes. SPLIT - How To Do It With all utilities I write, you get help by entering the program with no arguments on the command line. What you see is a Reader's Digest version of this documentation. SPLIT requires at least two command line arguments: split [/r] parent_file_name target_drive The "parent_file_name" is any valid DOS file name. "target_drive" is the drive to which you wish to begin SPLITting. SPLIT allows you to change drives in process, but it wants to know where to begin. The optional switch "/r" tells SPLIT to automatically replace any existing child files on your target diskette(s). This function is basically for re-SPLITting a file to the same diskette(s) as a previous SPLIT. Normally, SPLIT finds one of it's children and tells you it's there. Then it asks permission before writing over it. What SPLIT Does SPLIT begins by locating your parent file. Then it looks at your target drive and crams as much of the parent as it can onto that disk or diskette. Then it tells you it is time to continue. This is where you can change drives. To stay on the same drive, change diskettes and press [ENTER]. Otherwise, enter the letter of the drive you want to go to next. SPLIT continues this process until the entire parent file has been written. SPLIT also enters some code into each child file to let UNSPLIT know how to UNSPLIT it. See "What UNSPLIT Does" below for more information on UNSPLIT. Please note that you DO NOT have to have a fresh diskette in the drive. SPLIT WILL NOT overwrite existing files on your diskette UNLESS it is an older child of the existing parent file. Also note, however, that you DO have to have your diskette pre- formatted, as SPLIT WILL NOT format your diskette(s) for you. (See "History & Direction" below for possible changes to this rule.) While SPLIT is doing it's job, it gives you two percentages. The first percentage is the percent of completion of the current child being written. The second percentage is the percent of the completion of the entire process. UNSPLIT - Large File UnSplitting Utility Purpose Obviously, the purpose of UNSPLIT was to get back what SPLIT created (or un-created, whichever way you want to look at it!). If you haven't already, read about the purpose of SPLIT above. Requirements UNSPLIT requirements are the same as SPLIT. See "Requirements" above under SPLIT's stuff. UNSPLIT - How To Do It With all utilities I write, you get help by entering the program with no arguments on the command line. What you see is a Reader's Digest version of this documentation. UNSPLIT requires at least one command line argument: unsplit [/r] [drive:]child [target_drive:[path]] The "child" file name only actually needs to be the root file name of the name of the original parent file. When SPLIT does it's job, it names the first child "`parent_file_name'.0". All you really have to give UNSPLIT is "parent_file_name". You don't have to, but you should include the drive on which the first child exists. You will be able to swap drives and diskettes during the process, but UNSPLIT needs to know where to begin. Now, it is my recommendation that you get into the directory on your hard drive where you want the UNSPLIT version of your parent file to be. Then, enter the UNSPLIT command with a drive:child combination. Since it is possible to swap drives during the SPLIT, you wouldn't want to execute UNSPLIT with a floppy as your default drive. (Not that it should hurt, mind you.) The optional "target_drive:[path]]" tells UNSPLIT where to put the original parent file if it is not the current drive and directory. Otherwise, UNSPLIT writes the parent file to where you are when you execute it. The optional switch "/r" tells UNSPLIT to automatically overwrite the existing parent if it exists. By default, UNSPLIT asks your permission before overwriting an existing parent. What UNSPLIT Does UNSPLIT looks for your first child file. Once found, it looks for a file with the same name as the parent file name contained within special code in the first child file. If that parent exists, UNSPLIT asks permission to overwrite it unless you give it the /r switch. UNSPLIT then reads the child file from the diskette, and, when that's done, UNSPLIT knows to tell you to insert the next diskette if there is another to insert. Please note that, though UNSPLIT can tell which is the next child to read, it cannot tell you which drive that child needs to come from. Therefore, if you swapped drives during the SPLIT operation, number those diskettes so you can reinsert them in the proper order and change drives when necessary. (During coding for this latest version, I was going to have SPLIT record the next drive to accommodate UNSPLIT. But, this would have meant lots of diskette swapping. That was so unfriendly to the user, that I dropped the idea and put a little bit of the responsibility back on the user.) UNSPLIT continues UNSPLITting until all children have been read and then entire parent has been recreated. While UNSPLITting, UNSPLIT looks at the date and time stamp on each child for the date and time stamp of the original parent. This prevents you from accidentally sticking a child of a previous SPLIT in the place of the child you actually need. UNSPLIT warns you if it finds a child that doesn't belong to the proper parent, and prompts you either to continue, or replace the diskette with the one containing the proper child. Like SPLIT, while UNSPLIT is doing it's job, it gives you percentages telling you the relative completion of the stages of it's work. The first percentage is relative to the reading of the child. The second percentage is relative to the completion of the creation of the parent. INFO On Both Programs Installing When you get these programs, there is no installation utility. In fact, SPLIT and UNSPLIT are ready to run (unless, of course, you haven't un-archived them from the BBS or service from which you downloaded them). Just copy them into a directory that your PATH command includes. Look in your DOS manual(s) for more information on what PATH does. History & Direction Like all other utilities I write, I first wrote SPLIT and UNSPLIT because we needed something like it where I work. We would compress a file with vise-grips, but couldn't seem to get some of them small enough to copy from one computer to another. The first version of SPLIT and UNSPLIT wouldn't even copy the child files to the diskette for you. You had to SPLIT them to your hard drive, then copy them, one at a time, to a floppy. The same with UNSPLIT. You had to copy from the floppies one file at a time, then UNSPLIT them. The next version offered the enhancement of copying the files for you, but there was still the limitation of having to tell SPLIT what kind of floppies you were using. And, inevitably, someone around here ran out of their 1.2MB floppies SPLITting a file one day, and we scrambled for disks, realizing if we could just tell it to swap drives and go to the 1.44MB drive, we'd be OK. Now, SPLIT figures it out for you. You can switch drives and diskette sizes until you are blue in the face. We've even SPLIT files as large as a couple hundred megabytes to 40MB Bernoulli cartridges! At the time I finished programming SPLIT and UNSPLIT for this latest version, I thought that I might expand it to include compression and all the little goodies those utilities offer. But, that would be reinventing the wheel. So, since the Shareware/Freeware market offers the best in compression utilities, I wont attempt to compete with their products. I still plan to expand SPLIT to include multiple file specifications and recursive directory searches across multiple drives. A colleague of mine even made the brilliant suggestion of providing a command file so that you could provide a list of file specifications and multiple drives and media to SPLIT. Another enhancement might be to format unformatted floppies, but I haven't decided whether to actually format the diskette myself or to drop out and let your DOS do it for me (and you!). I have all of the stuff in SPLIT to do it, as SPLIT grabs INT 24h (for you technical people!), letting me know the diskette drive status. But I just don't know if I want to actually do the formatting myself. The next version of SPLIT will verify that, if you are re- SPLITting, the parent file you are splitting was last written at a date and time LATER than the date and time it was written during the last SPLIT. This will save you time and trouble if you either forgot that you had already SPLIT the latest version of a file, or, if you somehow attempt to SPLIT and OLDER version of a file to a newer SPLIT version of the same file. Any other suggestions would be appreciated. This is one of my pet projects. Every time I get a useful suggestion, I attempt to employ it. Future Support Future support of enhancement requests for SPLIT and UNSPLIT will depend upon the number of people who respond to me regarding their use of these programs. YOU DO NOT HAVE TO REGISTER OR PAY ME A DIME TO USE THIS SOFTWARE (Of course, if you feel generous ...). But, please, let me know how you are using the software, what you'd like to see it do, etc., etc. You can write to me at the address above or below. Basically, the more people who actually use it, the more demand I will see, and I will continue to support it. If enough people think my stuff is useable, I might just go ahead and shrink- wrap it! But, for right now, I want to be able to deliver the kind of stuff we have found we have needed to the rest of the world. Cost & Registration There is no cost or registration for SPLIT and UNSPLIT. I am distributing the programs and this documentation as FREEWARE!!! This is how I want to make my mark. Now, THIS is how I want to make my money. I will sell the COMPLETE C SOURCE CODE for BOTH programs for $25.00. Just send a request and $25.00 to me at: Joseph M. Morgan 9045 Kingston Rd. #1804 Shreveport, LA 71118 Checks and cash and things that can be turned into cash will be accepted. No credit cards please. (Of course, if you'd like to send my kids to college or buy me a new house, I'll accept that too!) Be sure to include your return address and the kind of diskettes you want. I will send it the day I receive payment. You will receive a package with the latest executable versions of SPLIT and UNSPLIT, the latest C source code both printed AND on the diskette type and size you request. I'll hang on to your address so that if we discover a small bug or some other kind of cosmetic problem, I'll send you the corrected source FREE, up to but not including the next major version of SPLIT and UNSPLIT! (Sounds like registration, doesn't it???) I'll probably even be nice enough to give you the next version's source for half-price or something if you order. Whatever the case, I won't let you regret it. I'm not doing this to get rich, I just think that the programs don't offer enough for sale, but the source does!